# coding=utf-8

__author__ = 'Arthur Fortes'

from django.db import models
from empresas.models import Empresa
from produtos.models import Produto
from tabelas.models import Tabela
from decimal import Decimal

class Compra(models.Model):
    codigo = models.CharField('Número da Nota', max_length=100, blank=True, null=True)
    valortotalnota = models.DecimalField('Valor total', blank=True, null=True, max_digits=10, decimal_places=2,
        default=0.0, editable=False)
    datacompra = models.DateField('Data da Compra')
    fornecedor = models.ForeignKey(Empresa)
    dataentrada = models.DateTimeField('Entrada no Sistema', auto_now_add=True, blank=True, null=True)
    totaldeitens = models.IntegerField('Total de Itens', blank=True, null=True, default=0, editable=False)
    notas = models.FileField('Nota de Compra', upload_to='Notas', blank=True, null=True)
    observacao = models.TextField('Observação', blank=True, null=True)
    pnumero = models.BooleanField('Sem NF', default=False)


    class Meta:
        verbose_name_plural = 'Compras'
        verbose_name = 'Compra'

    def save(self):
        if self.codigo == "":
            self.codigo = "Sem Numero"
        super(Compra, self).save()

        if self.pnumero == True:
            self.codigo = 'Sem NF'
        super(Compra, self).save()


    def __unicode__(self):
        return self.codigo


class CompraProdutoFornecedor(models.Model):
    codigo = models.CharField('Código', max_length=50)
    pedido = models.ForeignKey(Compra, verbose_name='Número da Nota')
    produtofornecedor = models.ForeignKey(Produto, verbose_name='Produto')
    ativo = models.BooleanField(default=False)
    quantidade = models.IntegerField('Quantidade')
    valorunitario = models.DecimalField('Valor Unitário', max_digits=10, decimal_places=2)
    valortotal = models.DecimalField('Valor total', blank=True, null=True, max_digits=10, decimal_places=2, default=0.0)
    tabela = models.ForeignKey(Tabela)
    datacompra = models.DateTimeField('Data da Compra', auto_now_add=True, blank=True, null=True)
    valor = models.DecimalField('Valor Sugerido', blank=True, null=True, max_digits=10, decimal_places=2)
    valora = models.DecimalField('Valor Atual Unitário', blank=True, null=True, max_digits=10, decimal_places=2)
    subtituir = models.BooleanField('Apagar', default=False)
    fornecedor = models.ForeignKey(Empresa, blank=True, null=True)


    class Meta:
        verbose_name_plural = 'Itens para compra'
        verbose_name = 'Item'

    def save(self):
        if self.quantidade != 0:
            pedido = Compra.objects.get(id=self.pedido.id)
            produto = Produto.objects.get(id=self.produtofornecedor.id)

            self.valortotal = self.valorunitario * self.quantidade

            k = Decimal(0.1)
            l = Decimal(0.01)

            self.custoimposto = (self.valorunitario + ((self.valorunitario * self.tabela.custofrete) * l)) * k

            self.valor = ((self.valorunitario + ((self.valorunitario * self.tabela.custofrete) * l) +
                           self.custoimposto) + (
                          (self.valorunitario + ((self.valorunitario * self.tabela.custofrete) * l)
                           + self.custoimposto) * (self.produtofornecedor.lucro * l)) + self.tabela.custoembalagem)

            if self.delete == True:
                pedido.totaldeitens = 0
                if pedido.totaldeitens > 0:
                    try:
                        obj = CompraProdutoFornecedor.objects.get(id=self.id)
                        x = obj.quantidade
                        y = obj.valortotal

                        pedido.totaldeitens = 0
                        pedido.valortotalnota = (pedido.valortotalnota - y) - self.valortotal
                        pedido.save()
                        produto.quantidade = (produto.quantidade - x) - self.quantidade
                        produto.qtdloja = (produto.qtdloja - x) - self.quantidade
                        produto.save()
                    except CompraProdutoFornecedor.DoesNotExist:
                        pedido.totaldeitens = 0
                        pedido.valortotalnota = pedido.valortotalnota - self.valortotal
                        pedido.save()
                        produto.quantidade = produto.quantidade - self.quantidade
                        produto.qtdloja = produto.qtdloja - self.quantidade
                        produto.save()

            if pedido.totaldeitens > 0:
                try:
                    obj = CompraProdutoFornecedor.objects.get(id=self.id)
                    x = obj.quantidade
                    y = obj.valortotal

                    pedido.totaldeitens = (pedido.totaldeitens - x) + self.quantidade
                    pedido.valortotalnota = (pedido.valortotalnota - y) + self.valortotal
                    pedido.save()
                    produto.quantidade = (produto.quantidade - x) + self.quantidade
                    produto.qtdloja = (produto.qtdloja - x) + self.quantidade
                    produto.save()


                except CompraProdutoFornecedor.DoesNotExist:
                    pedido.totaldeitens = pedido.totaldeitens + self.quantidade
                    pedido.valortotalnota = pedido.valortotalnota + self.valortotal
                    pedido.save()
                    produto.quantidade = produto.quantidade + self.quantidade
                    produto.qtdloja = produto.qtdloja + self.quantidade
                    produto.save()

            if pedido.totaldeitens == 0:
                pedido.totaldeitens = pedido.totaldeitens + self.quantidade
                pedido.valortotalnota = pedido.valortotalnota + self.valortotal
                pedido.save()
                produto.quantidade = produto.quantidade + self.quantidade
                produto.qtdloja = produto.qtdloja + self.quantidade
                produto.save()

        if self.quantidade > 0:
            produto = Produto.objects.get(id=self.produtofornecedor.id)
            if self.valora != 0:
                produto.valor = self.valora
                produto.save()
                self.valora = produto.valor
            try:
                obj = CompraProdutoFornecedor.objects.get(id=self.id)
                if self.valora != obj.valora:
                    produto.valor = self.valora
                    produto.save()
                    self.valora = produto.valor
                else:
                    self.valora = produto.valor
            except:
                self.valora = produto.valor
            self.ativo = True

        if self.quantidade == 0:
            self.ativo = False

        if self.subtituir == True:
            self.valortotal = self.valor = self.valorunitario = self.valora = self.quantidade = self.codigo = 0
            #self.produtofornecedor = " "
            self.subtituir = False

        self.fornecedor = self.pedido.fornecedor

        super(CompraProdutoFornecedor, self).save()


    def __unicode__(self):
        return self.produtofornecedor.nome